/**
 * Created by zhangb on 2015/10/23.
 */
//函数字面量
var func = function(str)
{
    console.log(str);
};
func(this);

var add = function(a,b)
{
    return a+b;
}

//四种调用模式：1、方法 2、函数 3、构造器 4、apply。这些模式在如何初始化关键参数this 的时候存在差异

var myObject =
{
    value:0,
    increment: function(inc)
    {
        this.value += typeof inc == 'number'?inc:1;
    }
}
myObject.increment(10);
console.log(myObject.value);
myObject.increment('str');
console.log(myObject.value);

myObject.double = function()
{
    var that = this;
    var helper = function()
    {
        that.value = add(that.value,that.value);
    };
    helper();
};
myObject.double();
console.log(myObject.value);
//构造器函数（不推荐）
var Quo = function(string)
{
    this.status = string;
};
Quo.prototype.get_status = function()
{
    return this.status;
};

var myQuo = new Quo('confused');
console.log(myQuo.get_status());

//apply 方法 让我们构建一个参数数组传递给调用函数，他也允许我们选择this的值，apply接受两个参数，第一个是绑定给this的值，第2个就是一个参数数组
var array = [2,3];
var sum =  add.apply(null,array);
console.log(sum);

var statusObject =
{
    status:'A-OK'
};

var status = Quo.prototype.get_status.apply(statusObject);
console.log(status);